package com.eedi.framework.user.service;

import com.eedi.framework.user.controller.sys.vo.*;
import com.eedi.framework.common.enums.CommonStatusEnum;
import com.eedi.framework.common.enums.UserTypeEnum;
import com.eedi.framework.common.pojo.PageResult;
import com.eedi.framework.user.controller.sys.vo.*;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;


public interface SysUserService {

    /**
     * 创建账号
     * @param createReq 创建账号请求
     * @return 账号信息
     */
    SysUserLoginInfoResp create(SysUserAccountCreateReq createReq);

    /**
     * 根据登录ID获取登录信息
     * @param sysUserLoginId 登录id
     * @return 登录信息
     */
    SysUserLoginInfoResp getLoginInfoByLoginId(String sysUserLoginId);

    /**
     * 判断密码是否匹配
     *
     * @param sysUserLoginId 登录账号
     * @return 是否匹配
     */
    boolean isPasswordMatch(String sysUserLoginId,String password);

    /**
     * 更新用户的最后登陆信息
     *
     * @param userId 用户编号
     * @param loginIp 登陆 IP
     */
    void updateUserLogin(String userId, String loginIp);

    /**
     * 账号列表
     * @param req 查询条件
     * @return 账号分页列表
     */
    PageResult<SysUserLoginInfoResp> page(SysUserAccountPageReq req);

    /**
     * 账号列表
     * @param req 查询条件
     * @param sysUserIds 用户ID区间
     * @return 账号分页列表
     */
    PageResult<SysUserLoginInfoResp> page(SysUserAccountPageReq req,Collection<String> sysUserIds);

    SysUserLoginInfoResp selectByMobileAndRole(String mobile, UserTypeEnum userTypeEnum);


    SysUserLoginInfoResp selectByLoginId(String loginId);

    /**
     * 根据账号编号查询账号信息
     * @param sysUserId 账号编号
     * @return 账号信息
     */
    SysUserLoginInfoResp selectBySysUserId(String sysUserId);

    /**
     * 根据用户ID列表查询用户信息
     * @param sysUserIds id列表
     * @return 用户信息
     */
    List<SysUserLoginInfoResp> selectBySysUserIds(Collection<String> sysUserIds);

    SysUserLoginInfoResp selectBySysUserIdIgnoreStatus(String sysUserId);

    /**
     * 重置密码
     * @param sysUserId 重制密码信息
     */
    String resetPassword(String sysUserId);

    /**
     * 重置手机号
     * @param req 重制手机号信息
     */
    void resetMobile(@Valid SysUserAccountResetMobileReq req);

    /**
     * 更新账号状态
     * @param sysUserAccountId
     * @param status
     */
    void updateAccountStatus(String sysUserAccountId, CommonStatusEnum status);


    /**
     * 更新账号信息
     * @param req 请求体
     */
    void updateSysUserInfo(SysUserUpReq req);
    /**
     * 停用账号
     * @param sysUserAccountId 账号ID
     */
    void disableBySysUserAccountId(String sysUserAccountId);

    /**
     * 启用账号
     * @param sysUserAccountId 账号ID
     */
    void enableBySysUserAccountId(String sysUserAccountId);

    /**
     * 根据登录ID获取加密后的密码
     * @param sysUserLoginId 登录ID
     * @return 密码
     */
    String getPwdByLoginId(String sysUserLoginId);

    /**
     * 修改用户信息
     * @param sysUserId 用户ID
     * @param req 请求对象
     */
    void editSysUserInfo(String sysUserId,SysUserProfileEditReq req);

    /**
     *  修改密码
     * @param req 请求对象
     * @param sysUserId 用户ID
     */
    void editPwd(String sysUserId, SysUserProfileEditPwdReq req);

    /**
     * 统计用户数量（含禁用）
     * @return 用户数量
     */
    Long countUser();

}
